/**
 * @file app.js
 * @author swan
 */

/* globals swan */

App({
    onLaunch(options) {
        // do something when launch
        // 添加到我的小程序引导，参见文档： http://smartprogram.baidu.com/docs/design/component/guide_add/
        console.log('onLaunch');

    },
    onShow(options) {
        // do something when show
        this.forceGetUserInfo();
        this.setPageInfo();
        console.log('onShow');

    },
    onHide() {
        // do something when hide
        console.log('onHide');
    },
    getUrl(path = '') {
        return this.globalData.host + path
    },
    globalData: {
        host: "http://ch.whdio.com",
        // host: "http://10.0.31.69"
    },
    getOpenID() {
        // get localStorage
        let openID = '';
        try {
            openID = swan.getStorageSync('openID');
        } catch (e) {
            console.log(e);
            // openID = '';
        }

        return openID;
    },
    setOpenID(openID) {
        try {
            swan.setStorageSync('openID', openID);
        } catch (e) {
            console.log(e);
        }
    },
    getToken() {
        // get localStorage
        let openID = '';
        try {
            openID = swan.getStorageSync('token');
        } catch (e) {
            console.log(e);
        }

        return openID;
    },
    setToken(token) {
        try {
            swan.setStorageSync('token', token);
        } catch (e) {

        }

    },
    loginThenDoEvent(someEvent) {
        swan.login({
            success: res => {
                console.log(res, 3123);
                let code = res.code || '';
                // code 一定要回传给开发者服务器，用来获取sessionKey做后续的解密操作
                // 参考 https://smartprogram.baidu.com/docs/develop/api/open_log/#Session-Key/
                swan.request({
                    url: getApp().getUrl('/v1/login'),
                    method: 'POST',
                    data: {
                        code
                    },
                    success: res => {
                        console.log(res.data, 2);
                        let openID = res.data.data && res.data.data.open_id;
                        let token = res.data.data && res.data.data.token;
                        if (!openID) {
                            //服务器返回了异常数据
                            swan.showModal({
                                title: '接口异常',
                                content: JSON.stringify(res.data),
                            })
                            return;
                        }
                        getApp().setOpenID(openID)
                        getApp().setToken(token)
                        someEvent()
                    },
                    fail: err => {
                        swan.showModal({
                            title: '网络异常',
                            content: JSON.stringify(err),
                        })
                    }
                });

            },
            fail: err => {
                console.log(err);
                // 网络异常等未知异常，进行异常处理
                swan.showModal({
                    title: '函数调用异常',
                    content: '用户标识不存在，需要先登录'
                })
                return
            }
        })
    },
    // 强用户数据需求。表示会竭尽全力的去拿用户数据，这可能造成用户的手百登录，同意授权等操作。
    forceGetUserInfo() {
        // 先检查是否登录。sessionKey存储在小程序服务端和开发者服务端，用来解密加密数据(data+iv等)
        swan.checkSession({
            success: res => {
                // 意味着小程序服务端和开发者服务端的sessionKey都没有过期，可以进行加解密操作
                // 如果是手百登录，但是小程序没有登录，需要先去获取openid
                let openID = getApp().getOpenID();

                if (!openID) {
                    // 没有openID，说明只是手百登录，但是还没有与三方服务器关联，需要先获取openID
                    this.loginThenDoEvent(this.forceGetUserInfoThenDecrypt);
                    return
                }

                this.forceGetUserInfoThenDecrypt();
            },
            fail: err => {
                // sessionKey失效，需要通过swan.Login去得到sessionKey
                this.loginThenDoEvent(this.forceGetUserInfoThenDecrypt);
            }
        });
    },
    forceGetUserInfoThenDecrypt() {
        swan.getUserInfo({
            success: res => {
                // succ 回调表示拿到用户数据，但有可能是mock数据（用户未登录或者用户拒绝授权）
                // 也可能拿到了真实数据

                // userInfo表示用户明文（非隐私）数据，可以当做UI元素展示，但不能用作用户体系打通

                let userInfo = res.userInfo;

                let iv = res.iv;

                if (!iv) { // 表明用户拒绝授权
                    swan.showModal({
                        title: '请同意授权',
                        content: JSON.stringify(iv)
                    });
                    return
                }

                let openID = getApp().getOpenID();

                if (!openID) {
                    // 意味着不是强登录。
                    // 强登录一定会去尝试设置openID, see forceGetUserInfo
                    this.forceGetUserInfo();
                }
                // 开始小程序用户体系和开发者用户体系打通
                console.log(res);
                swan.request({
                    url: getApp().getUrl('/v1/user-info'),
                    data: {
                        open_id: openID,
                        data: res.data,
                        iv: res.iv,
                    },
                    method: 'POST',
                    success: res => {
                        // 一个未知bug，第一次调用居然不弹窗
                        console.log(res.data.data, 1);
                    },
                    fail: err => {
                        swan.showModal({
                            title: '网络异常',
                            content: JSON.stringify(err),
                        })
                    }
                });

            },
            fail: err => {
                swan.showModal({
                    title: 'swan.getUserInfo 失败',
                    content: JSON.stringify(err),
                })
            }
        })
    },
    setPageInfo() {
        console.log('setPageInfo')
        swan.setPageInfo({
            title: '晒元宵节活动红包，爱奇艺60张年卡、600张季卡等你拿！-百度贴吧',
            keywords: '百度,百度贴吧,好运中国年,60,晒元,宵节',
            description: '晒元宵节活动红包，爱..昨天的百度APP元宵节活动中，共发出2亿现金红包、含151万个手气现金大奖和240辆红旗轿车，谁是好运锦鲤，快来分享！马上惊喜升级~摇中红包的锦鲤们即刻晒出红包金额截图，我们将会抽取660位好运锦鲤',
            articleTitle: '晒元宵节活动红包，爱奇艺60张年卡、600张季卡等你拿！',
            releaseDate: '2019-01-02 12:01:30',
            image: [
                'http://c.hiphotos.baidu.com/forum/w%3D480/sign=73c62dda83b1cb133e693d1bed5456da/f33725109313b07e8dee163d02d7912396dd8cfe.jpg',
                'https://hiphotos.baidu.com/fex/%70%69%63/item/43a7d933c895d143e7b745607ef082025baf07ab.jpg'
            ],
            video: [{
                url: 'https://www.baidu.com/mx/v12.mp4',
                duration: '100',
                image: 'https://smartprogram.baidu.com/docs/img/image-scaleToFill.png'
            }],
            visit: {
                pv: '1000',
                uv: '100',
                sessionDuration: '130'
            },
            likes: '75',
            comments: '13',
            collects: '23',
            shares: '8',
            followers: '35',
            success: function () {
                console.log('setPageInfo success');
            },
            fail: function (err) {
                console.log('setPageInfo fail', err);
            }
        })
    }
    // 获取用户手机号。用户手机号一定需要sessionKey去解密，所以会有一些前置操作
});
